#ifndef TRYTE_H
#define TRYTE_H

#include <string>

#include "tpe.h++"

class Tryte {
	public:
		Tryte();
		Tryte(const Tryte_t&);
		Tryte(const std::string&);
		Tryte_t getInt() const;
		std::string getString() const;
		void opSet(const Tryte_t&);
		void opSet(const Tryte&);
		void opNot();
		void opAnd(const Tryte_t&);
		void opAnd(const Tryte&);
		void opOr(const Tryte_t&);
		void opOr(const Tryte&);
		void opXor(const Tryte_t&);
		void opXor(const Tryte&);
		Trit_t opShl(const Tryte_t&, const Trit_t&);
		Trit_t opShl(const Tryte&, const Trit_t&);
		Trit_t opShr(const Tryte_t&, const Trit_t&);
		Trit_t opShr(const Tryte&, const Trit_t&);
		void opInc();
		void opInc3();
		void opDec();
		void opDec3();
		Trit_t opAdd(const Tryte_t&, const Trit_t&);
		Trit_t opAdd(const Tryte&, const Trit_t&);
		Trit_t opSub(const Tryte_t&, const Trit_t&);
		Trit_t opSub(const Tryte&, const Trit_t&);
		Trit_t getTrit(const size_t&);
		void setTrit(const size_t&, const Trit_t&);
	protected:
		Trit_t ternary_[TRITS_PER_TRYTE];
};

#endif

